/**************************************************************************
Copyright (C) jianbo miao Corporation.  All Rights Released.
this is a 3d engin named our_3d_engin.
our_3d_engin feature:
1:there is no float.
2:it do the 3d things all by softwear.
3:base on 1 and 2 , it can execution on arm which have no 3d hardwear accelerate.

  if you have any  suggestion or question,pls contact with me
  mail:miaojb@126.com
  msn:miaojianbo@hotmail.com
  qq:30209027
  
    2008/01/01
***************************************************************************/
#ifdef OUR_MAIN_C
#ifndef OUR_FONT_C
#define OUR_FONT_C

#include "our_math.h"
#include "our_3d.h"
#include "our_draw16.h"
#include "our_draw32.h"


//FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
//FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
const unsigned char  font6x8[][6] =

{
    
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },// sp
        
    { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },// !
    
    { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },// "
    
    { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },// #
    
    { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },// $
    
    { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },// %
    
    { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },// &
    
    { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },// '
    
    { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },// (
    
    { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },// )
    
    { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },// *
    
    { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },// +
    
    { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },// ,
    
    { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },// -
    
    { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },// .
    
    { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },// /
    
    { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },// 0
    
    { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },// 1
    
    { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },// 2
    
    { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },// 3
    
    { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },// 4
    
    { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },// 5
    
    { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },// 6
    
    { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },// 7
    
    { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },// 8
    
    { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },// 9
    
    { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },// :
    
    { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },// ;
    
    { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },// <
    
    { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },// =
    
    { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },// >
    
    { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },// ?
    
    { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },// @
    
    { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },// A
    
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },// B
    
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },// C
    
    { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },// D
    
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },// E
    
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },// F
    
    { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },// G
    
    { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },// H
    
    { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },// I
    
    { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },// J
    
    { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },// K
    
    { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },// L
    
    { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },// M
    
    { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },// N
    
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },// O
    
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },// P
    
    { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },// Q
    
    { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },// R
    
    { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },// S
    
    { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },// T
    
    { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },// U
    
    { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },// V
    
    { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },// W
    
    { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },// X
    
    { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },// Y
    
    { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },// Z
    
    { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },// [
    
    { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },// 55
    
    { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },// ]
    
    { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },// ^
    
    { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },// _
    
    { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },// '
    
    { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },// a
    
    { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },// b
    
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },// c
    
    { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },// d
    
    { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },// e
    
    { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },// f
    
    { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },// g
    
    { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },// h
    
    { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },// i
    
    { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },// j
    
    { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },// k
    
    { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },// l
    
    { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },// m
    
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },// n
    
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },// o
    
    { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },// p
    
    { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },// q
    
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },// r
    
    { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },// s
    
    { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },// t
    
    { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },// u
    
    { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },// v
    
    { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },// w
    
    { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },// x
    
    { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },// y
    
    { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },// z
    
    { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }// horiz lines
    
};
void OUR_Draw_char16(CLR clor,char c,USHORT *dis_2, int lpitch)
{
    char line,row;	
    c-=32;
    for(line=0; line<6; line++)
    {
        for(row=0; row<8; row++)
        {
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            
            dis_2+=lpitch;
        }
        dis_2-=lpitch<<3;
        dis_2+=1;
    }
    
}
void OUR_Draw_char16_BG(CLR clor,char c,USHORT *dis_2, int lpitch)
{
    char line,row;	
    c-=32;
    for(line=0; line<6; line++)
    {
        for(row=0; row<8; row++)
        {
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            else
            {
                *dis_2 =0;
            }
            dis_2+=lpitch;
        }
        dis_2-=lpitch<<3;
        dis_2+=1;
    }
    
}
void OUR_Draw_char2_16(CLR clor,char c,USHORT *dis_2, int lpitch)
{
    char line,row;	
    c-=32;
    for(line=0; line<6; line++)
    {
        for(row=0; row<8; row++)
        {
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            dis_2+=1;
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            dis_2+=lpitch-1;
            
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            dis_2+=1;
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            dis_2+=lpitch-1;
        }
        dis_2-=lpitch<<4;
        dis_2+=2;
    }
    
}
void OUR_Draw_Text16(int x,int y,CLR clor,char *s,UCHAR *dis, int lpitch)
{
    //	char line,row;
    USHORT *dis_2;	
    
    lpitch>>=1;
    dis_2 = (USHORT *)dis + x + y*lpitch;
    while(*s)
    {
        OUR_Draw_char16(clor,*s,dis_2,lpitch);
        dis_2+=6;
        s++;
    }
}
void OUR_Draw_Text16_BG(int x,int y,CLR clor,char *s,UCHAR *dis, int lpitch)
{
    //	char line,row;
    USHORT *dis_2;	
    
    lpitch>>=1;
    dis_2 = (USHORT *)dis + x + y*lpitch;
    while(*s)
    {
        OUR_Draw_char16_BG(clor,*s,dis_2,lpitch);
        dis_2+=6;
        s++;
    }
}

void OUR_Draw_BigText16(int x,int y,CLR clor,char *s,UCHAR *dis, int lpitch)
{
    //	char line,row;
    USHORT *dis_2;	
    
    lpitch>>=1;
    dis_2 = (USHORT *)dis + x + y*lpitch;
    while(*s)
    {
        OUR_Draw_char2_16(clor,*s,dis_2,lpitch);
        dis_2+=12;
        s++;
    }
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
void OUR_Draw_char32(CLR clor,char c,UINT *dis_2, int lpitch)
{
    char line,row;	
    c-=32;
    for(line=0; line<6; line++)
    {
        for(row=0; row<8; row++)
        {
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            dis_2+=lpitch;
        }
        dis_2-=lpitch<<3;
        dis_2+=1;
    }
    
}
void OUR_Draw_char2_32(CLR clor,char c,UINT *dis_2, int lpitch)
{
    char line,row;	
    c-=32;
    for(line=0; line<6; line++)
    {
        for(row=0; row<8; row++)
        {
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            dis_2+=1;
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            dis_2+=lpitch-1;
            
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            dis_2+=1;
            if(font6x8[c][line] & (0x01<<row))
                *dis_2 =clor;
            dis_2+=lpitch-1;
        }
        dis_2-=lpitch<<4;
        dis_2+=2;
    }
    
}
void OUR_Draw_Text32(int x,int y,CLR clor,char *s,UCHAR *dis, int lpitch)
{
    char line,row;
    UINT *dis_2;	
    
    lpitch>>=2;
    dis_2 = (UINT *)dis + x + y*lpitch;
    while(*s)
    {
        OUR_Draw_char32(clor,*s,dis_2,lpitch);
        dis_2+=6;
        s++;
    }
}

void OUR_Draw_BigText32(int x,int y,CLR clor,char *s,UCHAR *dis, int lpitch)
{
    char line,row;
    UINT *dis_2;	
    
    lpitch>>=2;
    dis_2 = (UINT *)dis + x + y*lpitch;
    while(*s)
    {
        OUR_Draw_char2_32(clor,*s,dis_2,lpitch);
        dis_2+=12;
        s++;
    }
}

//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

void OUR_sprintf(char *d,char *s,int a[])
{ 
    int c,i,j;
    i=0;
    while(*s)
    {
        if(*s =='%')
        {
            c=*s;
            s++;
            if(*s =='x')
            {
                *d='0';
                d++;
                *d='x';
                d++;
                for(j=28;j>=0;j-=4)
                {
                    c=(a[i] & (0x0f<<(j)))>>j;
                    if(c<10)
                        c+=0x30;
                    else
                        c+=0x40-9;
                    *d=c;
                    d++;
                }
                i++;
            }
            else
            {
                *d=c;
                d++;
                *d=*s;
                d++;
            }
            
        }
        else 
        {
            *d=*s;
            d++;
        }
        s++;
    }
    *d=*s;
}

//FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
//FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
#endif
#endif

